#include <stdio.h>
#include "esp_log.h"
#include "esp_psram.h"
#include "nvs_flash.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "wifi/wifi_manager.h"
#include "esp_log.h"
#include "led/led_manager.h"
#include "audio/player.h"
#include "audio/i2s_recorder.h"

#define LED_GPIO_PIN       48
// #define GPIO_PIN           9

static const char *TAG = "MAIN";
// static volatile bool button_pressed = false;

// void gpio_isr_handler(void *arg) {
//     // 判断中断状态
//     int pin_level = gpio_get_level(GPIO_PIN);
//     // 高电平表示按下
//     button_pressed = (pin_level == 1); 
// }

void app_main(void) {
    size_t psram_size = esp_psram_get_size();
    ESP_LOGI("PSRAM", "PSRAM大小：%d 字节", psram_size);

    // 初始化NVS
    esp_err_t ret = nvs_flash_init();
    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
        ESP_ERROR_CHECK(nvs_flash_erase());
        ret = nvs_flash_init();
    }
    ESP_ERROR_CHECK(ret);

    // 创建LEDManager实例并初始化
    LEDManager led_manager;
    led_manager_init(&led_manager, LED_GPIO_PIN);

    // 播放
    player_init();
    // // 录音
    i2s_recorder_init();

    // 创建WiFiManager实例
    WiFiManager wifi_manager;
    wifi_manger_init(&wifi_manager);

    // 连接WiFi
    wifi_manger_start(&wifi_manager);

    // 根据WiFi连接状态设置LED
    EventBits_t bits = xEventGroupGetBits(wifi_manager.event_group);
    if (bits & WIFI_CONNECTED_BIT) {
        led_manager_set_level(&led_manager, 1);
        // xTaskCreate(audio_task, "audio_task", 8192, NULL, tskIDLE_PRIORITY, NULL);

        // 录音
        xTaskCreate(i2s_recorder_task, "i2s_recorder_task", 4096, NULL, 5, NULL);
    }

    // //配置GPIO引脚
    // gpio_config_t io_config = {
    //     .intr_type = GPIO_INTR_ANYEDGE,
    //     .pin_bit_mask = (1ULL << GPIO_PIN),
    //     .mode = GPIO_MODE_INPUT,
    //     .pull_up_en = GPIO_PULLUP_ENABLE
    // };
    // // 检查配置是否成功
    // if (gpio_config(&io_config)!= ESP_OK) {  
    //     ESP_LOGE(TAG, "配置GPIO报错");
    //     return;
    // }

    // // 安装中断服务实例
    // ESP_ERROR_CHECK(gpio_install_isr_service(ESP_INTR_FLAG_LEVEL1));
    // ESP_ERROR_CHECK(gpio_isr_handler_add(GPIO_PIN, gpio_isr_handler, (void*)GPIO_PIN));


    // // 防止 main 函数退出
    // while (1) {
    //     vTaskDelay(500 / portTICK_PERIOD_MS);
    //     if (button_pressed) {
    //         ESP_LOGI(TAG, "当前唤醒状态：已唤醒");
    //     } else {
    //         ESP_LOGI(TAG, "当前唤醒状态：已休眠");
    //     }
    // }
}